package com.ruoyi.system.mapper;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.system.domain.BuildingDataBoard;
import com.ruoyi.system.domain.HouseDataBoard;
import com.ruoyi.system.domain.SysDevice;
import com.ruoyi.system.domain.result.IotDeviceBindResult;
import org.apache.ibatis.annotations.Param;

/**
 * 设备Mapper接口
 * 
 * @author ruoyi
 * @date 2024-08-07
 */
public interface SysDeviceMapper 
{
    /**
     * 查询设备
     * 
     * @param deviceId 设备主键
     * @return 设备
     */
    public SysDevice selectSysDeviceByDeviceId(Long deviceId);

    /**
     * 查询设备列表
     * 
     * @param sysDevice 设备
     * @return 设备集合
     */
    public List<SysDevice> selectSysDeviceList(SysDevice sysDevice);

    /**
     * 查找不存在的设备
     * @param deviceCodeList
     * @return
     */
    public List<String> checkDeviceCodeNotExists(List<String> deviceCodeList);

    /**
     * 通过设备code 查询设备信息
     * @param deviceCode
     * @return
     */
    public SysDevice selectSysDeviceByDeviceCode(@Param("deviceCode") String deviceCode,
                                                 @Param("deptId") Long deptId,
                                                 @Param("beginDate") Date beginDate,
                                                 @Param("endDate") Date endDate

    );
    /**
     * 新增设备
     * 
     * @param sysDevice 设备
     * @return 结果
     */
    public int insertSysDevice(SysDevice sysDevice);

    /**
     * 修改设备
     * 
     * @param sysDevice 设备
     * @return 结果
     */
    public int updateSysDevice(SysDevice sysDevice);

    /**
     * 配置报警
     * @param deviceIds
     * @return
     */
    public int configAlarm(@Param("alarmConfigId") Long alarmConfigId, @Param("deviceIds") List<Long> deviceIds);
    /**
     * 绑定设备
     *
     * @param sysDevice 设备
     * @return 结果
     */
    public int updateSysDeviceWithCode(SysDevice sysDevice);
    /**
     * 删除设备
     * 
     * @param deviceId 设备主键
     * @return 结果
     */
    public int deleteSysDeviceByDeviceId(Long deviceId);

    /**
     * 批量删除设备
     * 
     * @param deviceIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteSysDeviceByDeviceIds(Long[] deviceIds);


    /**
     * 统计开栓户数
     * @param deptId
     * @return
     */
    public int useDevice(Long deptId);

    /**
     * 统计面积
     * @param deptId
     * @return
     */
    public BigDecimal selectArea(Long deptId);

    /**
     * 统计小区的用户数、集中器数
     * @param deptId
     * @return
     */
    public List<HouseDataBoard> houseList(Long deptId);

    /**
     * 统计每户的室温和累计热量
     */
    public List<BuildingDataBoard> buildingList(@Param("deptId") Long deptId, @Param("housingId") Long housingId , @Param("buildNo") String buildNo, @Param("beginDate") Date beginDate, @Param("endDate") Date endDate);
}
